Python使用Requests下载资源获取实时下载进度

7,943次阅读
7 条评论

共计 1263 个字符,预计需要花费 4 分钟才能阅读完成。

前言

这段时间一直都是比较忙,包括工作上的事情和生活上的事情,已经有一个月没有更新文章了;前段时间收集了很多的 Kindle 书籍,写爬虫的时候为了方便观察进度,要在控制台打印图书的资源的实时下载进度,今天就来说说如何实现这个小功能。
Python 使用 Requests 下载资源获取实时下载进度

正文

首先,当我们请求 Requests 请求一个资源路径的时候,这个请求的响应体会被立即下载返回,这样的话我们就不能获取进度了,但是 Requests 为我们提供了 stream 流的方式来获取响应体,这样就有利于我们来获取实时的下载进度,例如下载 IDEA:

request_url = 'https://download.jetbrains.com/idea/ideaIU-2018.2.1.exe'
res = requests.get(request_url , stream=True)

当上面的语句被执行时,只有响应头被下载并返回给了我们,所以我们可以获取我们需要的数据,比如内容长度content-length

content_length = res.headers['content-length']

然后我们再使用 Response.iter_content 来控制工作流,来遍历获取资源数据;另外在 Python3 中在打印内容开头加入 \r 会使光标回到首行,并不会换行,这样就可以实现进度条的效果,所以最终的代码为:

import requests
from contextlib import closing

if __name__ == '__main__':
    url = 'https://download.jetbrains.com/idea/ideaIU-2018.2.1.exe'
    with closing(requests.get(url, stream=True)) as response:
        chunk_size = 1024  # 单次请求最大值
        content_size = int(response.headers['content-length'])  # 内容体总大小
        data_count = 0
        with open('idea.exe', "wb") as file:
            for data in response.iter_content(chunk_size=chunk_size):
                file.write(data)
                data_count = data_count + len(data)
                now_jd = (data_count / content_size) * 100
                print("\r 文件下载进度:%d%%(%d/%d) - %s" % (now_jd, data_count, content_size, url), end=" ")

效果为:

文件下载进度:6%(36305920/540246736) - https://download.jetbrains.com/idea/ideaIU-2018.2.1.exe
当然,你也可以根据自己的喜爱调整输入的内容,比如模仿 Centos 的下载进度 =>>>> 实现这样的效果

后记

人生就是在不断的学习与折腾中成长,殊为一边修习,一边休息。

正文完
使用官方微信小程序体验更多功能
post-qrcode
 6
憧憬Licoy
版权声明:本站原创文章,由 憧憬Licoy 于2018-08-08发表,共计1263字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(7 条评论)
FreeDope 评论达人 LV.1
2019-07-24 10:47:18 回复

为什么我下载的进度可以达到160%? 跑了第一个数据后就开始报错了。

 Windows  Edge  中国广东省深圳市电信
wordpress建站 评论达人 LV.1
2018-12-30 16:04:48 回复

传说Python很强大一直想学点儿的,还没开始学。。

 Windows  Chrome  中国四川省成都市电信
sooele 评论达人 LV.1
2018-10-31 00:43:20 回复

转发了。

 Android  Chrome  中国香港电讯盈科
广州网站建设 评论达人 LV.2
2018-08-20 10:26:21 回复

每日签到,生活更精彩 ~:2018-08-20 10:26:32

 Windows  Chrome  中国广东省广州市电信